Many large and small businesses operate computer based databases to track and record several aspects of their business. For example, it is quite common for a business to keep a computer based database which contains a record of their regular clients, with details such as the customers name, address, contact numbers (such as telephone and fax numbers), contact email address, etc.
As the business grows and evolves, or customer requirements change, the type of information recorded in the database may need to be modified to reflect this change. For example, a customer may move to a different address, or change their company name, or their contact details. Such changes may simply require the updating of data values within the database, and can usually be accomplished without any serious problems.
There are other complex situations, however, where a major reorganization of the database is required to ensure that the database remains relevant and useful for the business. For example, when a new form of communication is developed, this may result in the need for the provision of an extra field in the database to hold the new information. An example of such a development is email.
In another more complex example, a customer may decide that they require deliveries to two separate addresses, creating the requirement for an extra “address” field in the database.
In a final example, the type of data held in a data field or column may also change. For example, a data field that was previously only arranged to hold integer values may need to be modified to hold character values.
Such complex changes necessitate a change in the underlying structure of the database. For example, a database such as a relational database is comprised of a large number of tables, each table being divided into a number of columns, each column being divided up into a number of elements, each element being arranged to house a data value. Furthermore, each table in the database may be linked to other tables via devices such as pointers. That is, some elements in the table may not contain data values per se, but contain values that “point” or link one table to another table.
Therefore, when a table is to be modified, any data currently held in the table must be preserved to prevent accidental loss of the data. This is usually achieved by temporarily shutting down the database, unloading the data from the affected table(s), performing the required database modifications, and re-loading the data into the newly created database structure. To ensure that data integrity is maintained, it is necessary to prevent users from accessing the database during such modifications and reorganizations. This “downtime” should be preferably minimised, as many large companies cannot effectively function when their database is not accessible.
Therefore, as a general proposition, it is desirable to reduce the amount of time required to effect a database reorganization.